package com.linkoog.devtools.json.file_editer.editer.ui.jsonTree;

import com.fasterxml.jackson.databind.JsonNode;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
import com.linkoog.devtools.json.JsonFileEditerIcons;
import com.linkoog.devtools.json.file_editer.editer.ui.JackJsonTreeNode;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

public class JsonStructureTreeCellRender extends ColoredTreeCellRenderer {


    @Override
    public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        JackJsonTreeNode jackJsonTreeNode = (JackJsonTreeNode) value;


        JsonNode jsonNode = jackJsonTreeNode.getJsonNode();
        if (jsonNode.isObject()) {
            setIcon(JsonFileEditerIcons.OBJECT_ICON);
            String name = jackJsonTreeNode.isArrayItem()? "item" + jackJsonTreeNode.getName() : jackJsonTreeNode.getName();
            append(name, SimpleTextAttributes.REGULAR_ATTRIBUTES);

            String type = jackJsonTreeNode.isArrayItem()? "array_object" : "object";
            append(" [", JsonTreeStyles.lightAttributes, false);
            append(type,  JsonTreeStyles.blueAttributes, false);
            append("]", JsonTreeStyles.lightAttributes, false);

            append(" (", JsonTreeStyles.lightAttributes, false);
            append(jackJsonTreeNode.getChildCount() + "属性", JsonTreeStyles.purpleAttributes, false);
            append(")", JsonTreeStyles.lightAttributes, false);
        } else if (jsonNode.isArray()) {
            setIcon(JsonFileEditerIcons.ARRAY_ICON);
            String name = jackJsonTreeNode.isArrayItem()? "item" + jackJsonTreeNode.getName() : jackJsonTreeNode.getName();
            append(name, SimpleTextAttributes.REGULAR_ATTRIBUTES);

            String type = jackJsonTreeNode.isArrayItem()? "array_item" : "array";
            append(" [", JsonTreeStyles.lightAttributes, false);
            append(type,  JsonTreeStyles.blueAttributes, false);
            append("]", JsonTreeStyles.lightAttributes, false);

            append(" (", JsonTreeStyles.lightAttributes, false);
            append(jackJsonTreeNode.getChildCount() + "属性", JsonTreeStyles.purpleAttributes, false);
            append(")", JsonTreeStyles.lightAttributes, false);
        } else  if (jsonNode.isValueNode()){
            if (! jackJsonTreeNode.isArrayItem()){
                //父节点为对象、null
                setIcon(JsonFileEditerIcons.PROPERTY_ICON);
                append(jackJsonTreeNode.getName(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
                append(": ", SimpleTextAttributes.REGULAR_ATTRIBUTES);
            } else {
                //父节点为数组
                setIcon(JsonFileEditerIcons.ITEM_ICON);
            }

            if (jsonNode.isNull()) {
                append("null", JsonTreeStyles.nullColorAttributes, false);
            } else if (jsonNode.isBoolean()) {
                append(jsonNode.toString(), JsonTreeStyles.booleanColorAttributes, false);
            } else if (jsonNode.isNumber()) {
                append(jsonNode.toString(), JsonTreeStyles.numberColorAttributes, false);
            } else {
                append(jsonNode.toString(), JsonTreeStyles.stringColorAttributes, false);
            }
        }
    }
}
